#include "listeUpload.h"



void init_listeUpload(ListeUpload *liste){

	liste->debut=NULL;
	liste->fin=NULL;
	liste->taille=0;
}



/*
 * copier la deuxieme variable dans la premiere
 */
void copierUpload(upload *donnees1, upload *donnees2){
	donnees1->port = donnees2->port;
	strcpy(donnees1->key, donnees2->key);
	strcpy(donnees1->ip, donnees2->ip);
	donnees1->pourcentage = donnees2->pourcentage;
	donnees1->taille = donnees2->taille;
	donnees1->debut = donnees2->debut;
	donnees1->fin = donnees2->fin;
	donnees1->delay = donnees2->delay;
}



int est_egaleUpload(upload donnees1, upload donnees2){

	if ((donnees1.port!=donnees2.port)&&(!strcmp(donnees1.ip,donnees2.ip))&&(!strcmp(donnees1.key,donnees2.key))) {
		return 1;
	} else {
		return 0;
	}
}


void insererUpload(ListeUpload *liste, upload *donnees){

	EltListeUpload *nv;
	nv=malloc(sizeof(EltListeUpload));
	copierUpload(&(nv->donnees),donnees);
	if(liste->taille==0){
		nv->precedent=liste->debut;
		nv->suivant=liste->fin;
		liste->debut=nv;
		liste->fin=nv;
		liste->taille++;}
	else{
		nv->precedent=NULL;
		nv->suivant=liste->debut;
		liste->debut->precedent=nv;
		liste->debut=nv;
		liste->taille++;

	}
}


void supprimerUpload(ListeUpload *liste, upload donnees){

	EltListeUpload *elt;
	elt=malloc(sizeof(EltListeUpload));
	elt=liste->debut;
	while(elt!=NULL){

		if(est_egaleUpload(elt->donnees,donnees)){

			if(elt==liste->debut){

				liste->debut=elt->suivant;
				liste->taille--;
				if(liste->taille >1){
					elt->suivant->precedent=NULL;
					elt->suivant=NULL;
				}
			}

			else if(elt==liste->fin){

				liste->fin->precedent->suivant=NULL;
				liste->fin=liste->fin->precedent;
				liste->taille--;


			}
			else{

				elt->suivant->precedent=elt->precedent;
				elt->precedent->suivant=elt->suivant;
				liste->taille--;

			}

			break;

		}


		else
			elt=elt->suivant;



	}

}

void supprimer_listeUpload(ListeUpload *l){

	if (l->taille!=0){
		EltListeUpload *elt;
		elt=malloc(sizeof(EltListeUpload));

		elt=l->debut;

		while(elt!=NULL){

			supprimerUpload(l,elt->donnees);
			elt=l->debut;
		}

	}

}



void afficher_listeUpload(ListeUpload * l){
	if (l->taille!=0){
		EltListeUpload *elt;
		elt=malloc(sizeof(EltListeUpload));
		elt=l->debut;
		while(elt!=l->fin){
			afficher_Upload(&(elt->donnees));
			elt=elt->suivant;
		}
		afficher_Upload(&(elt->donnees));
	}
	else printf("aucun transfert en cours\n");
}
void afficher_listeUpload2(ListeUpload * l,const char * ip,int port){
	if (l->taille!=0){
		EltListeUpload *elt;
		elt=malloc(sizeof(EltListeUpload));
		elt=l->debut;
		while(elt!=l->fin){
			if ((strcmp(elt->donnees.ip, ip)==0) && (elt->donnees.port == port)) {
				afficher_Upload(&(elt->donnees));
			}

			elt=elt->suivant;
		}
		afficher_Upload(&(elt->donnees));
	}
	else printf("aucun transfert en cours\n");
}
void afficher_Upload(upload * donnees){
	printf("uploading %s %s : %d (%d from %d )\n ",donnees->key,donnees->ip,donnees->port,donnees->pourcentage,donnees->taille);
}
void modify_upload(ListeUpload * l,upload * up,int pourcentage){
	if (l->taille!=0){
		EltListeUpload *elt;
		elt=malloc(sizeof(EltListeUpload));
		elt=l->fin;
		while(elt!=NULL){
			if(!est_egaleUpload((elt->donnees), *up)){
				(elt->donnees).pourcentage = pourcentage;
			}
			elt=elt->precedent;
		}

	}

}
int checkExistUpload(ListeUpload * l,upload * up){
	if (l->taille!=0){
		EltListeUpload *elt;
		elt=malloc(sizeof(EltListeUpload));
		elt=l->fin;
		while(elt!=NULL){
			if(!est_egaleUpload((elt->donnees), *up)){
				return 1;
			}
			elt=elt->precedent;
		}

	}
	return 0;
}
